/*
 * Copyright the original author or authors.
 * 
 * Licensed under the MOZILLA PUBLIC LICENSE, Version 1.1 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.mozilla.org/MPL/MPL-1.1.html
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 package com.kairos.utils
{
	import com.bourre.structures.Range;
	import com.kairos.utils.monitor.AverageBeaconProcessTimeField;
	import com.kairos.utils.monitor.AverageStepField;
	import com.kairos.utils.monitor.BeaconProcessTimeField;
	import com.kairos.utils.monitor.FPSField;
	import com.kairos.utils.monitor.MemoryField;
	import com.kairos.utils.monitor.MonitorField;
	import com.kairos.utils.monitor.ScreenSizeField;
	import com.kairos.utils.monitor.StepField;
	import com.kairos.utils.monitor.TimeField;		

	/**
	 * Enumerates all monitoring fields natively provided by Kairos.
	 * 
	 * <p>Use that class to fill the monitor with the fields you want
	 * to display.</p>
	 * 
	 * <p>If you want to change the color of a field, do it before adding
	 * it to the monitor.</p>
	 * 
	 * @author  Cédric Néhémie
	 * @see		MonitorField
	 * @see		Monitor
	 * @usage	Use the enumeration to insert built-in fields into the monitor.
	 * 
	 * <listing>
	 * var monitor : Monitor = new Monitor ( _root, 150, 120 );
	 * 
	 * monitor.addField ( MonitorFieldsList.STEP );
	 * monitor.addField ( MonitorFieldsList.AVERAGE_STEP );
	 * </listing>
	 */
	public class MonitorFieldsList
	{
		/**
		 * The <code>STEP</code> constant holds a simple statistic field that
		 * register and display the timestep dispatched by the <code>RTBeacon</code>.
		 */
		static public const STEP : MonitorField = new StepField ( new Range ( 0, 120 ) );
			   
		/**
		 * The <code>AVERAGE_STEP</code> constant hold a field that register and display the average
		 * of timestep dispatched by the <code>RTBeacon</code>.
		 */
		static public const AVERAGE_STEP : MonitorField = new AverageStepField ( new Range ( 0, 120 ) );
		
		/**
		 * The <code>REAL_STEP</code> field register and display the real time step
		 * between two frames. When <code>RTBeacon</code> is configured with smooth
		 * and max step size the timestep passed to objects is distorded rise against
		 * the real time gap. 
		 */
		static public const REAL_STEP : MonitorField = new TimeField ( new Range ( 0, 120 ) );	
			   
		/**
		 * The <code>FPS</code> field register and display the current framerate at which
		 * the swf is running.
		 */
		static public const FPS : MonitorField = new FPSField ( new Range ( 0, 80 ) );	
		
		/**
		 * The <code>BEACON</code> field register and display the last process duration
		 * of the global <code>RTBeacon</code> instance.
		 */
		static public const BEACON : MonitorField = new BeaconProcessTimeField();	
	
		/**
		 * The <code>AVERAGE_BEACON</code> field register and display the average value
		 * of the last process duration of the global <code>RTBeacon</code> instance.
		 */
		static public const AVERAGE_BEACON : MonitorField = new AverageBeaconProcessTimeField();	

		/**
		 * The <code>MEMORY</code> field register and display the amount of memory used.
		 * by the flash player.
		 */
		static public const MEMORY : MonitorField = new MemoryField ( new Range ( 0, 50000 ) );
		
		/**
		 * The <code>SCREEN</code> field display the size of the user screen.
		 */
		static public const SCREEN : MonitorField = new ScreenSizeField ();
	}
}